package org.subside.List;

import org.subside.List.pojo.Person;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;


/**
 * @Author : zhangbo
 * @data : 2024/5/16
 * @description :筛选（filter）筛选，是按照一定的规则校验流中的元素，将符合条件的元素提取到新的流中的操作
 */
public class StreamTest2 {
    public static void main(String[] args) {
        //筛选出Integer集合中大于7的元素，并打印出来
        List<Integer> list = Arrays.asList(6, 7, 3, 8, 1, 2, 9);
        list.stream().filter(a->a>7).forEach(System.out::println);
        Arrays.asList(6, 7, 3, 8, 1, 2, 9).stream().filter(a->a>7).forEach(System.out::println);

        //筛选员工中工资高于8000的人，并形成新的集合。 形成新集合依赖collect（收集），后文有详细介绍。
        List<Person> personList = new ArrayList<Person>();
        personList.add(new Person("Tom", 8900, 23, "male", "NewYork"));
        personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
        personList.add(new Person("Lily", 7800, 21, "female", "Washington"));
        personList.add(new Person("Anni", 8200, 24, "female", "NewYork"));
        personList.add(new Person("Owen", 9500, 25, "male", "NewYork"));
        personList.add(new Person("Alisa", 7900, 26, "female", "NewYork"));
        //获取薪资高于8000的员工name
        //filter后面跟的是筛选过滤的条件
        List<String> fiterList = personList.stream().filter(x -> x.getSalary() > 8000)
                //.map类似根据name分组
                .map(Person::getName).collect(Collectors.toList());
        //如何多个条件进行过滤结果
        List<String> collect = personList.stream()
                //此处的person，是对满足多个条件person筛选，过滤
                .filter(person -> getPersonList(person)).map(Person::getName).collect(Collectors.toList());

        System.out.print("薪资高于8000美元的员工,来自纽约年龄大于18的男性：" + collect);

    }
    public static boolean getPersonList(Person person){
            if (person.getAge() > 18 && "NewYork".equals(person.getArea()) && "male".equals(person.getSex()) && person.getSalary() > 8000) {
                return true;
            }
        return false;
    }
}
